package com.st.listener;

import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;

@WebListener
public class SessionAttrListener implements HttpSessionAttributeListener {

    public void attributeAdded(HttpSessionBindingEvent se)  { 
    	// 属性添加
    	// session.setAttribute(), 如果指定的属性名在Session中不存在, 触发的就是Added事件
    	System.out.println("属性添加 : " + se.getName() +"-"+ se.getValue());
    	
    	// 如果在session 中添加了一个叫做user的属性
    	if ("user".equals(se.getName())) {
    		// 获取app
    		ServletContext app = se.getSession().getServletContext();
    		
    		int loginCount = (int) app.getAttribute("loginCount");
    		
    		loginCount ++;
    		
    		app.setAttribute("loginCount", loginCount);
    	}
    
    }

    public void attributeRemoved(HttpSessionBindingEvent se)  { 
    	// 属性移除
    	// 当session.removeAttribute(), 如果指定的属性在Session中存在, 才会触发remove事件
    	// 当session.invalidate(), 如果Session中存在属性, 也会触发remove事件
    	// session 超时过期时, 也会触发remove事件
    	
    	System.out.println("属性移除"+ se.getName() +"-"+ se.getValue());
    
    	// 用户退出
    	if ("user".equals(se.getName())) {
    		// 获取app
    		ServletContext app = se.getSession().getServletContext();
    		
    		int loginCount = (int) app.getAttribute("loginCount");
    		
    		loginCount --;
    		
    		app.setAttribute("loginCount", loginCount);
    	}
    }

    public void attributeReplaced(HttpSessionBindingEvent se)  { 
    	// 属性替换
    	// session.setAttribute(); 如果指定属性名, 在Session中已经存在, 这里就是一个替换操作
    	System.out.println("属性替换"+ se.getName() +"-"+ se.getValue());
    }
	
}
